package com.EAsystem.service;

import com.EAsystem.entity.CourseSelection;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface CourseSelectionService {

    
    /**
     * 根据ID查询选课记录
     * @param id 选课记录ID
     * @return 选课记录
     */
    CourseSelection findById(Integer id);
    
    /**
     * 根据学生ID查询选课记录
     * @param studentId 学生ID
     * @return 选课记录列表
     */
    List<CourseSelection> findByStudentId(Long studentId);
    
    /**
     * 根据课程ID查询选课记录
     * @param courseId 课程ID
     * @return 选课记录列表
     */
    List<CourseSelection> findByCourseId(Long courseId);
    
    /**
     * 根据学生ID和课程ID查询选课记录
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 选课记录
     */
    CourseSelection findByStudentIdAndCourseId(Long studentId, Long courseId);
    
    /**
     * 添加选课记录
     * @param courseSelection 选课记录
     * @return 添加结果（影响行数）
     */
    int add(CourseSelection courseSelection);
    
    /**
     * 更新选课记录状态
     * @param id 选课记录ID
     * @param status 状态（0-待审核，1-已选课，2-已退课）
     * @param updateTime 更新时间
     * @return 更新结果（影响行数）
     */
    int updateStatus(Long id, Integer status, String updateTime);
    
    /**
     * 删除选课记录
     * @param id 选课记录ID
     * @return 删除结果（影响行数）
     */
    int delete(Integer id);
    
    /**
     * 分页查询选课记录
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页信息
     */
    PageInfo<CourseSelection> findByPage(int pageNum, int pageSize);
    
    /**
     * 根据学生ID分页查询选课记录
     * @param studentId 学生ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页信息
     */
    PageInfo<CourseSelection> findByStudentIdWithPage(Integer studentId, int pageNum, int pageSize);
    
    /**
     * 根据课程ID分页查询选课记录
     * @param courseId 课程ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 分页信息
     */
    PageInfo<CourseSelection> findByCourseIdWithPage(Integer courseId, int pageNum, int pageSize);
}
